Hooks 都是一個一個 function,在生命週期中有些時刻發生了,就會去執行對應的 Hooks function!
created hook 會初始化所有狀態和事件,所以在beforeCreate 中無法取得任何元件的內容。不論是 data 或是 methods 都無法取得!
ex:
export default {
data() {
return {
val: 'hello'
}
},
beforeCreate() {
console.log('Value of val is: ' + this.val) // undefined!!!
}
}
使用場景例如:執行一些不需用到實體 data 屬性的邏輯或是 API。
接著進入 created().....屬性都綁定好了,但還沒掛載到 DOM 上。
// 使用和上面一樣的例子
export default {
data() {
return {
val: 'hello'
}
},
created() {
console.log('Value of val is: ' + this.val) // 印出 Value of val is: hello
}
}
使用場景例如: 打完某隻 API 後需要儲存資料,就可在
created()中讀取/賦值給 data。
進到 Vue 3 使用 Composition API,beforeCreate 和 created 都改使用 setup(),代表原本寫在beforeCreate 和 created的內容都改放在 setup 中!
ex:
import { ref } from 'vue'
export default {
setup() {
const val = ref('hello')
console.log('Value of val is: ' + val.value)
return {
val
}
}
}
mounting hooks 處理元件的掛載和渲染,最最最最常見使用的 hooks !
beforeMount() 和 onBeforeMount()元件尚未渲染以及掛載,此時根元素也還不存在。
mounted() 和 onMounted()在元件第一次渲染之後會被呼叫的 hooks,此時元素已經可以直接從 DOM 取得。
ex:
// Composition API 使用 refs 取得 DOM
import { ref, onMounted } from 'vue'
export default {
setup() { /* Composition API */
const root = ref(null)
onMounted(() => {
console.log(root.value)
})
return {
root
}
},
mounted() { /* Options API */
console.log(this.$el)
}
}
當狀態被修改時,會觸發再次渲染
beforeUpdate() 和 onBeforeUpdate()當資料改變,元件被重新渲染前! 在畫面改變前,適合在此處去手動更新 DOM,例如移除事件監聽
也可以用在追蹤元件是否被編輯或是追蹤事件去取消動作(例如:回復功能 undo)
updated() 和 onUpdated()當 DOM 更新後會去呼叫 updated
ex:
import { ref, onBeforeUpdate, onUpdated } from 'vue'
export default {
setup () {
const count = ref(0)
const val = ref(0)
onBeforeUpdate(() => {
count.value++;
console.log("beforeUpdate");
})
onUpdated(() => {
console.log("updated() val: " + val.value)
})
return {
count, val
}
}
}
大部分時候,比較多會使用 watchers 去偵測資料是否改變,因為watchers 會提供資料更改前後的值。
生命週期未完待續.....
每日一句:
每天的文章都在比短.....